package cn.wmelon.shell.command.script.builder;

import java.util.UUID;

/**
 * 组装脚本内容
 * 默认设置一个随机的脚本地址
 * 脚本中用到  双引号的地方 需要转义 例： "  ->  \"
 * 脚本中用到  单引号的地方 需要转义 例： '  ->  '\"'\"'   你没有看错  就是需要这么长QWQ  一个单引号!!!!
 * linux 中 双引号 中的内容可以使用变量 单引号中的内容只是个字符串
 *
 * @author watermelon
 * @time 2020/3/4
 */
public class ScriptBuilder {

    public ScriptBuilder() {
        //默认设置一个随机的脚本地址
        this.addRandomPath();
    }

    /**
     * 通过脚本文件组装脚本内容
     * todo 暂未实现读取资源文件
     *
     * @param scriptPath 脚本资源文件地址
     */
    public ScriptBuilder(String scriptPath) {
        //默认设置一个随机的脚本地址
        this.addRandomPath();
    }

    private StringBuilder stringBuilder = new StringBuilder("#!/bin/bash\n");

    /**
     * 脚本文件的地址（包含文件名）
     */
    private String filePath;

    /**
     * 换行
     *
     * @return
     */
    public ScriptBuilder ln() {
        this.stringBuilder.append("\n");
        return this;
    }

    /**
     * 增加字符串 不换行
     *
     * @param text
     * @return
     */
    public ScriptBuilder addText(String text) {
        this.stringBuilder.append(text);
        return this;
    }

    /**
     * 增加字符串 并换行
     *
     * @param line
     * @return
     */
    public ScriptBuilder addTextLn(String line) {
        this.stringBuilder.append(line + "\n");
        return this;
    }


    /**
     * 设置脚本文件的地址
     * path 不需要管顺序
     *
     * @param filePath
     * @return
     */
    public ScriptBuilder addPath(String filePath) {
        this.filePath = filePath;
        return this;
    }

    /**
     * 设置一个随机的脚本名字 如果脚本执行后就要删除的话  就可以这样做
     *
     * @return
     */
    public ScriptBuilder addRandomPath() {
        String replace = UUID.randomUUID().toString().replace("-", "");
        this.filePath = replace + ".sh";
        return this;
    }

    public String getFilePath() {
        return filePath;
    }

    /**
     * 获取最终的脚本内容
     *
     * @return
     */
    public String getScript() {
        return stringBuilder.toString();
    }

    /**
     * 获取 将此脚本输出为一个文件 的String
     *
     * @return
     */
    public String build() {
        StringBuilder st = new StringBuilder("echo -e '");
        st.append(stringBuilder);
        st.append("' >> ");
        st.append(filePath);
        return st.toString();
    }
}
